#!/usr/bin/python
# -*-coding:UTF-8 -*-

# ========================
# @Time  : 2021/2/4
# @Author: Sunny
# ========================

"""
魔术方法(魔术方法、特殊方法)
__init__:类创建对象的时候自动触发
__call__:可以放对象像函数一样调用(对象加括号去调用的时候触发)
__new__: 在通过类创建对象的时候调用
注意点：一般情况下不要去重写new方法，实现单例模式的时候可以重写new方法实现
如果重写了new方法，一定要调用父类的new方法，并将结果返回

"""
import requests

class MyTest(object):
    def __init__(self,name,age):
        print('--------init方法------')

    # # 自己重写了New方法后，因为定义的方法为空，覆盖了object本身的new方法，所以无法创建对象，print(m)会为None，且__init__
    # # 方法也不会被调用，因为连对象都没有，是无法调用__init__的
    # def __new__(cls, *args, **kwargs):
    #     pass

    # def __new__(cls, *args, **kwargs):  #new方法决定了(类创建对象)返回的结果是类还是函数
    #     return requests.session     #返回的函数

    @staticmethod
    def __new__(cls, *args, **kwargs):  #这里的参数是固定语法，会接受__init__里面的参数
        print(args)
        return super().__new__(cls)  #如果重写了new方法，一定要调用父类的new方法，并将结果返回


m=MyTest(111,222)
print(m)

